package com.xit.poems.format;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 七律
 * @author hqz
 *
 */
public class SevenEightPoemsFormat {

	/**
	 * 七律仄起首句不押韵（基本型）
	 * @param poemsFormat
	 * @return Map
	 */
	public Map<Integer, Object> sevenEightStartByBase(String[] poemsFormat){
		Map<Integer ,Object> error = new HashMap<>();
		
		List<String> sevenBase = new ArrayList<>();
				//1
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("仄");
				//2
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
				//3
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				//4
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				//1
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("仄");
				//2
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
				//3
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				//4
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
		int i = 1;  //数组下标
		for (String string : sevenBase) {
			if(string == "v"){
				i++;
			}else{
				if(poemsFormat[i] == "v"){
					i++;
				}else{
					if(poemsFormat[i] == string){
						i++;
					}else{
						error.put(i, string);
						i++;
					}
				}
				
			}
		}
		return error;
	}
	
	
	
	/**
	 * 七律平起首句押韵（第二句起）
	 * @param poemsFormat
	 * @return Map
	 */
	public Map<Integer, Object> sevenEightStartBySecond(String[] poemsFormat){
		Map<Integer ,Object> error = new HashMap<>();
		
		List<String> sevenBase = new ArrayList<>();
		//2
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("平");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("平");
		//4
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("仄");
		sevenBase.add("平");
		sevenBase.add("平");
		
		//1
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("仄");
		//2
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("平");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("平");
		
		//
		//3
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("仄");
		//4
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("仄");
		sevenBase.add("平");
		sevenBase.add("平");
		//1
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("仄");
		//2
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("平");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("平");
		
		int i = 1;  //数组下标
		for (String string : sevenBase) {
			if(string == "v"){
				i++;
			}else{
				if(poemsFormat[i] == "v"){
					i++;
				}else{
					if(poemsFormat[i] == string){
						i++;
					}else{
						error.put(i, string);
						i++;
					}
				}
			}
		}
		return error;
	}
	
	/**
	 * 七律平起首句不押韵（第三句起）
	 * @param poemsFormat
	 * @return Map
	 */
	public Map<Integer, Object> sevenEightStartByThird(String[] poemsFormat){
		Map<Integer ,Object> error = new HashMap<>();
		
		List<String> sevenBase = new ArrayList<>();
		//3
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				//4
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				//1
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("仄");
				//2
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
				
				//3
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				//4
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				//1
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("仄");
				//2
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
		int i = 1;  //数组下标
		for (String string : sevenBase) {
			if(string == "v"){
				i++;
			}else{
				if(poemsFormat[i] == "v"){
					i++;
				}else{
					if(poemsFormat[i] == string){
						i++;
					}else{
						error.put(i, string);
						i++;
					}
				}
			}
		}
		return error;
	}
	
	
	/*	七律仄起首句押韵（第四句起）
		（仄起平收）
		⊙仄仄平平，（韵）
		平平仄仄平。（韵）
		⊙平平仄仄，
		⊙仄仄平平。（韵）*/
	public Map<Integer, Object> sevenEightStartByFour(String[] poemsFormat){
		Map<Integer ,Object> error = new HashMap<>();
		
		List<String> sevenBase = new ArrayList<>();
		//4
				sevenBase.add("v");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				//2
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
				sevenBase.add("平");
				sevenBase.add("v");
				sevenBase.add("仄");
				sevenBase.add("平");
		//3
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("仄");
		//4
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("仄");
		sevenBase.add("平");
		sevenBase.add("平");
		
		//1
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("仄");
		//2
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("平");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("平");
		//3
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("仄");
		//4
		sevenBase.add("v");
		sevenBase.add("平");
		sevenBase.add("v");
		sevenBase.add("仄");
		sevenBase.add("仄");
		sevenBase.add("平");
		sevenBase.add("平");
		
		int i = 1;  //数组下标
		for (String string : sevenBase) {
			if(string == "v"){
				i++;
			}else{
				if(poemsFormat[i] == "v"){
					i++;
				}else{
					if(poemsFormat[i] == string){
						i++;
					}else{
						error.put(i, string);
						i++;
					}
				}
			}
		}
		return error;
	}

}
